package com.uraurora.crescent.advanced.tree;

/**
 * 线段树接口
 * @param <T> 表示内部存储的数据类型
 */
public interface ISegmentTree<T> {

    /**
     * 单点更新
     * @param index 索引
     * @param value 在原值的基础上根据更新策略更新
     * @return 是否成功
     */
    boolean update(int index, T value);

    /**
     * 区间更新
     * @param left 区间左边界
     * @param right 区间右边界
     * @param value 在原值基础上根据更新策略更新的值
     * @return 是否成功
     */
    boolean update(int left, int right, T value);

    /**
     * 单点查询
     * @param index 索引
     * @param initValue 初始值，根据初始值与更新策略执行查询
     * @return 查询得到值
     */
    T query(int index, T initValue);

    /**
     * 区间查询
     * @param left  区间左边界
     * @param right 区间右边界
     * @param initValue 初始值，根据初始值与更新策略执行查询
     * @return 查询得到值
     */
    T query(int left, int right, T initValue);

}
